Enums (PHP 8.1+)

Computer Programming - পিএইচপি (PHP 8)
193

PHP 8.1-এ Enums (ইনামস) একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য হিসেবে যোগ করা হয়েছে, যা কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণ উন্নত করতে সাহায্য করে। Enums হল একটি ডেটা টাইপ যা একটি পূর্বনির্ধারিত সেট (বা মান) থেকে একটি কেবলমাত্র একটি মান গ্রহণ করতে দেয়। এটি মূলত সেই ক্ষেত্রে ব্যবহৃত হয় যেখানে একটি ভেরিয়েবল কেবল কিছু নির্দিষ্ট মানের মধ্যে হতে পারে।

Enums ব্যবহার করা কোডের মধ্যে পূর্বনির্ধারিত মানের জন্য আরো স্পষ্টতা এবং নিরাপত্তা নিয়ে আসে। এটি টাইপ সেফটি বাড়ায় এবং কোডের ত্রুটি কমাতে সাহায্য করে।


Enums কী?

Enums বা Enumeration হল একটি ডেটা টাইপ যেখানে ভেরিয়েবলটি কেবল নির্দিষ্ট সংখ্যক মানের মধ্যে হতে পারে। PHP 8.1-এ, আপনি সহজে একটি সেট মান তৈরি করতে পারবেন এবং তা কোডে ব্যবহার করতে পারবেন। এটি কোডের কনস্ট্যান্টের জন্য একটি ভালো বিকল্প এবং কোডকে আরও পরিষ্কার এবং সঠিক বানাতে সাহায্য করে।

Enums এর Syntax

PHP 8.1-এ Enums তৈরি করতে enum কিওয়ার্ড ব্যবহার করা হয়। একটি Enum ক্লাসে আপনি নির্দিষ্ট মানের একটি সেট ডিফাইন করবেন, এবং সেই সেটের মধ্যে থাকা কোনো একটি মান নির্বাচন করা যাবে।

enum Status {
    case Pending;
    case Approved;
    case Rejected;
}

এখানে, Status একটি Enum হিসেবে ডিফাইন করা হয়েছে, এবং এটি তিনটি মান ধারণ করে: Pending, Approved, এবং Rejected


Enums এর উদাহরণ

Basic Example

enum Status {
    case Pending;
    case Approved;
    case Rejected;
}

$status = Status::Pending;

echo $status; // Output: Pending

এখানে, আমরা একটি Status enum ডিফাইন করেছি এবং Pending মানটি সেট করেছি। echo $statusPending আউটপুট হবে।

Enums with Values

PHP 8.1 এ Enums আরও শক্তিশালী করা হয়েছে, যেখানে আপনি প্রতিটি case এর সাথে একটি নির্দিষ্ট মান (value) অ্যাসাইন করতে পারবেন।

enum Status: int {
    case Pending = 1;
    case Approved = 2;
    case Rejected = 3;
}

$status = Status::Approved;
echo $status->value; // Output: 2

এখানে, আমরা Status enum ডিফাইন করেছি যেখানে প্রতিটি case এর সাথে একটি ইনটিজার মান অ্যাসাইন করা হয়েছে। Status::Approved এর মান ২ এবং value প্রপার্টি ব্যবহার করে এটি প্রিন্ট করা হয়েছে।

String Enums Example

আপনি একটি string টাইপের Enum-ও ডিফাইন করতে পারেন:

enum Status: string {
    case Pending = 'PENDING';
    case Approved = 'APPROVED';
    case Rejected = 'REJECTED';
}

$status = Status::Approved;
echo $status->value; // Output: APPROVED

এখানে, Status enum-এ প্রতিটি case একটি স্ট্রিং মান নিয়ে আসে, যেমন 'PENDING', 'APPROVED', এবং 'REJECTED'।


Enums এর সুবিধা

১. টাইপ সেফটি:

Enums আপনার কোডে টাইপ সেফটি উন্নত করে। যখন আপনি একটি Enum তৈরি করেন, তখন আপনি কেবলমাত্র সেই নির্দিষ্ট মানের সাথে কাজ করতে পারবেন যা Enum-এ ডিফাইন করা হয়েছে। এটি কোডের ত্রুটি কমাতে এবং কমপ্লেক্স লজিকের সাথে সম্পর্কিত ভুল রোধ করতে সাহায্য করে।

২. স্পষ্টতা এবং পাঠযোগ্যতা:

এটি আপনার কোডের মানগুলির জন্য আরও স্পষ্টতা এবং বোধগম্যতা প্রদান করে। উদাহরণস্বরূপ, Status::Pending দেখলে আপনি সহজেই বুঝতে পারবেন যে এটি একটি স্ট্যাটাস যা কোনো প্রসেস বা রিভিউ প্রক্রিয়া অপেক্ষমাণ (pending) অবস্থায় রয়েছে, তবে সাধারণ কনস্ট্যান্ট ভ্যালু বা ইন্টিজার ব্যবহার করলে এটি বুঝতে অসুবিধা হতে পারে।

৩. বিকল্প কনস্ট্যান্ট ব্যবহারের সাথে তুলনা:

আগে, আপনি কনস্ট্যান্টস ব্যবহার করে একই ধরনের মান রাখতেন, কিন্তু Enums ব্যবহারের মাধ্যমে এটি আরও সুসংগঠিত এবং সঠিকভাবে পরিচালনা করা সম্ভব হয়।

৪. ক্লিন এবং কমপ্যাক্ট কোড:

Enums ব্যবহারের মাধ্যমে কোডের সাইজ ছোট এবং পড়তে সহজ হয়। এর মাধ্যমে আপনি একটি কনস্ট্যান্ট মান ব্যবস্থাপনাকে আরও সোজা এবং পরিষ্কার করতে পারেন।


Enums এর সীমাবদ্ধতা

১. অ্যাক্সেস করার জন্য মেথড প্রয়োজন:

Enums এর মান অ্যাক্সেস করার জন্য আপনাকে ->value ব্যবহার করতে হবে। এটি কিছুটা কোডে অতিরিক্ত যন্ত্রণা হতে পারে।

২. টাইপে সীমাবদ্ধতা:

এটি শুধুমাত্র নির্দিষ্ট ডেটা টাইপে ব্যবহৃত হতে পারে (যেমন int, string, unit), কিন্তু এটি এখনও অন্যান্য ডেটা টাইপ যেমন অ্যারে বা অবজেক্টের ক্ষেত্রে ব্যবহার করা যাবে না।

৩. PHP সংস্করণ সীমাবদ্ধতা:

PHP 8.1 এর পূর্ববর্তী সংস্করণগুলিতে Enums সমর্থিত নয়, তাই এই ফিচারটি ব্যবহার করতে PHP 8.1 বা তার পরবর্তী সংস্করণ প্রয়োজন।


Enums এর ব্যবহারের ক্ষেত্রে কিছু উদাহরণ

টাস্ক স্ট্যাটাস Enum

enum TaskStatus {
    case ToDo;
    case InProgress;
    case Completed;
}

function getTaskStatus(TaskStatus $status): string {
    return match($status) {
        TaskStatus::ToDo => "Task is yet to start",
        TaskStatus::InProgress => "Task is ongoing",
        TaskStatus::Completed => "Task is completed",
    };
}

$status = TaskStatus::InProgress;
echo getTaskStatus($status); // Output: Task is ongoing

এখানে, TaskStatus একটি Enum যা একটি টাস্কের স্ট্যাটাস সংরক্ষণ করে। getTaskStatus ফাংশনটি এই Enum এর বিভিন্ন মানের উপর ভিত্তি করে একটি স্ট্রিং ফিরিয়ে দেয়।


উপসংহার

PHP 8.1 এ Enums যোগ হওয়া PHP প্রোগ্রামিং ভাষাকে আরও শক্তিশালী এবং সুসংগঠিত করেছে। এটি কোডের স্পষ্টতা, নিরাপত্তা এবং টাইপ সেফটি বাড়িয়ে দেয়, এবং কোড লেখার সময় ভ্যালিডেশন এবং ত্রুটি কমাতে সহায়ক। আপনি যখন পূর্বনির্ধারিত মানের একটি সেটের সাথে কাজ করবেন, তখন Enums আপনাকে সঠিক এবং পরিষ্কার কোড লিখতে সাহায্য করবে, এবং আপনার কোডের রক্ষণাবেক্ষণ সহজতর হবে।

Content added By

Enumerations এর ভূমিকা এবং প্রয়োজনীয়তা

180

PHP 8.1-এ Enumerations (এনাম) একটি নতুন বৈশিষ্ট্য হিসেবে অন্তর্ভুক্ত হয়েছে, যা কোডে নির্দিষ্ট এবং সীমাবদ্ধ মানের একটি গ্রুপকে সুন্দরভাবে এবং শক্তিশালীভাবে পরিচালনা করতে সহায়ক। এটি বিশেষত তখন উপকারী যখন আপনাকে কিছু নির্দিষ্ট মানের মধ্যে একটি নির্বাচন করতে হয়, যেমন স্টেটাস কোড, ক্যাটেগরি, বা ট্রান্সলেটেড স্ট্রিংসEnumerations ব্যবহার করে আপনি একটি মানকে আরো শক্তিশালী এবং টাইপ সেফভাবে পরিচালনা করতে পারবেন।

Enumerations এর ধারণা

Enumeration (এনাম) হলো একটি ডেটা টাইপ যা একটি নির্দিষ্ট এবং সীমাবদ্ধ মানের সেট নির্দেশ করে। সাধারণত, যখন কোডে কিছু পূর্বনির্ধারিত মানের মধ্যে কোনো একটি মান নির্বাচন করতে হয়, তখন Enums ব্যবহার করা হয়। PHP 8.1-এ Enums দুটি ধরনে উপলব্ধ: Backed Enums এবং Pure Enums

  • Pure Enums: শুধুমাত্র একটি সেট মান এবং তার সাথে সম্পর্কিত কার্যাবলির মাধ্যমে কাজ করে। এটি একটি সাধারণ এনাম যা শুধুমাত্র নির্দিষ্ট একাধিক কনস্ট্যান্ট রাখে।
  • Backed Enums: এখানে এনামের কনস্ট্যান্টের সাথে একটি ভ্যালু (যেমন string বা integer) যুক্ত থাকে, যা এনামটি কীভাবে রক্ষণাবেক্ষণ করা হবে তা নির্দেশ করে।

Enumerations এর ব্যবহার

  1. Backed Enums:
    • Backed Enums ব্যবহার করা হয় যখন এনাম কনস্ট্যান্টগুলোর সাথে সম্পর্কিত একটি মান থাকে, যেমন string বা integer।
    • এটি বিশেষভাবে উপকারী যখন আপনি ডাটাবেসে, API-তে, বা অন্যান্য ইন্টারফেসে নির্দিষ্ট মানের সাথে কাজ করতে চান।
  2. Pure Enums:
    • Pure Enums এর কনস্ট্যান্ট গুলো কোনো নির্দিষ্ট মানের সাথে সম্পর্কিত থাকে না, বরং তাদের শুধুমাত্র একটি নাম থাকে।
    • এটি সাধারণত কেস স্টেটাস বা কোনো নির্দিষ্ট অ্যাকশন ধরনের জন্য ব্যবহৃত হয়।

Enumerations এর উদাহরণ

Pure Enums উদাহরণ:

enum Status {
    case Pending;
    case Approved;
    case Rejected;
}

// ব্যবহার:
$status = Status::Pending;

echo $status->name;  // Output: Pending

এখানে, Status একটি Pure Enum যা শুধুমাত্র Pending, Approved, এবং Rejected কেসগুলো ধারণ করে। আপনি এগুলোর মধ্যে একটিকে নির্বাচন করতে পারবেন এবং name পদ্ধতি ব্যবহার করে তার নাম পেতে পারবেন।

Backed Enums উদাহরণ:

enum Status: string {
    case Pending = 'pending';
    case Approved = 'approved';
    case Rejected = 'rejected';
}

// ব্যবহার:
$status = Status::Approved;

echo $status->value;  // Output: approved

এখানে, Status একটি Backed Enum যেখানে প্রতিটি কেসের একটি string মান ('pending', 'approved', 'rejected') রয়েছে। আপনি value পদ্ধতি ব্যবহার করে এই মানগুলো অ্যাক্সেস করতে পারবেন।


Enumerations এর সুবিধা

১. টাইপ সেফটি নিশ্চিত করা

একটি Enum ব্যবহার করলে আপনি শুধুমাত্র নির্দিষ্ট মানগুলি ব্যবহার করতে পারবেন, যা টাইপ সেফটি নিশ্চিত করে। এটি কোডের ভুল কমাতে সাহায্য করে, কারণ আপনি যে মানগুলো ব্যবহার করবেন তা পূর্বনির্ধারিত এবং সীমাবদ্ধ।

উদাহরণ:

enum Status {
    case Pending;
    case Approved;
    case Rejected;
}

function processStatus(Status $status) {
    // শুধুমাত্র সঠিক এনাম কেস গ্রহণ হবে
    if ($status === Status::Pending) {
        echo "Processing pending status.";
    }
}

processStatus(Status::Approved);  // টাইপ সেফ, অনুমোদিত কেস

এখানে, processStatus() ফাংশনটি শুধুমাত্র Status এনামের মধ্যে থাকা কেসগুলো গ্রহণ করবে, অন্য কোনো মান গ্রহণ করা যাবে না।

২. কোডের রিডেবিলিটি এবং স্পষ্টতা

Enums কোডের রিডেবিলিটি বাড়াতে সাহায্য করে, কারণ আপনি একটি নির্দিষ্ট মানের জন্য একটি অর্থপূর্ণ নাম ব্যবহার করতে পারেন। এর ফলে কোড পড়া এবং বুঝতে অনেক সহজ হয়।

উদাহরণ:

enum AccessLevel: int {
    case Guest = 1;
    case User = 2;
    case Admin = 3;
}

function checkAccess(AccessLevel $level) {
    if ($level === AccessLevel::Admin) {
        echo "Admin access granted.";
    }
}

এখানে, AccessLevel এনাম ব্যবহার করে আমরা সহজেই অনুমান করতে পারি যে প্রতিটি কেসের সাথে সম্পর্কিত রোল কী। এটি কোডের স্পষ্টতা বৃদ্ধি করে।

৩. কোডের মেইনটেনেন্স সহজ

এনামসের মাধ্যমে কোডের মধ্যে পূর্বনির্ধারিত মানগুলোর ব্যবস্থাপনা করা অনেক সহজ হয়ে যায়। যখনই আপনি সেই মান পরিবর্তন করতে চান, আপনি শুধু এনামটির কেসগুলির পরিবর্তন করতে পারবেন, এবং এতে কোডের অন্যান্য অংশে পরিবর্তন আনার প্রয়োজন হবে না।

৪. ডাটাবেসে এবং API-তে ব্যবহার

Backed Enums সাধারণত ডাটাবেস বা API গুলোর জন্য খুবই উপকারী। আপনি একটি string বা integer মানকে এনামের কেসের সাথে ম্যাপ করতে পারেন, যা ডাটাবেসে থাকা মানের সাথে মেলানো সহজ করে।


Enumerations এর প্রয়োজনীয়তা

  1. স্ট্যাটিক এবং সীমিত মানের গ্রুপ পরিচালনা: যখন একটি কোডের মধ্যে শুধুমাত্র কিছু নির্দিষ্ট মানের প্রয়োজন হয় (যেমন স্টেটাস কোড, রোলস, ক্যাটেগরিস), তখন এনাম ব্যবহার করা খুবই কার্যকরী।
  2. কোডের রিডেবিলিটি এবং ডিবাগিং: এনাম ব্যবহারের ফলে কোড আরো স্পষ্ট হয় এবং ডিবাগিং সহজ হয়। কারণ আপনি সরাসরি নির্দিষ্ট নামের মাধ্যমে মান অ্যাক্সেস করতে পারবেন।
  3. সাধারণ মানের সাথে কাজ করা: যখন কোডের মধ্যে অনেকগুলো পূর্বনির্ধারিত স্ট্রিং বা সংখ্যা থাকে, তখন Enums তাদেরকে গ্রুপ করার এবং ব্যবহার করার সুনির্দিষ্ট পদ্ধতি প্রদান করে, যা টাইপ সেফটি এবং রিডেবিলিটি নিশ্চিত করে।

Enumerations এর সীমাবদ্ধতা

  1. পূর্ববর্তী PHP সংস্করণে সাপোর্ট নেই: Enums PHP 8.1 এবং পরবর্তী সংস্করণে পাওয়া যায়, তাই পুরনো PHP সংস্করণে এটি ব্যবহৃত হতে পারে না।
  2. মাল্টি-ভ্যালু এনামস সমর্থন করা হয় না: PHP Enums শুধুমাত্র একটি ভ্যালু ধারণ করতে পারে, অর্থাৎ একাধিক ভ্যালুর সমন্বয় হতে পারে না (যেমন পাইথন বা জাভাতে EnumSet এর মতো)।
  3. কমপ্লেক্স এনাম প্যাটার্নের অভাব: কিছু জটিল প্যাটার্ন, যেমন এনাম কেসের মধ্যে প্যারামিটার পাস বা মেথড অ্যাসাইন করা, সরাসরি সমর্থিত নয়।

উপসংহার

PHP 8.1-এ Enums কোডের মধ্যে নির্দিষ্ট মানগুলোর গ্রুপ পরিচালনা করা অনেক সহজ এবং টাইপ সেফ করে তোলে। এটি অ্যাপ্লিকেশন ডেভেলপমেন্টে একটি গুরুত্বপূর্ণ টুল হিসেবে ব্যবহার করা যেতে পারে, বিশেষত যখন আপনাকে স্ট্যাটাস কোড, ক্যাটেগরি, অথবা কিছু সীমাবদ্ধ মানের মধ্যে কাজ করতে হয়। Enums কোডের স্পষ্টতা বাড়াতে এবং রক্ষণাবেক্ষণ সহজ করতে সাহায্য করে। Backed Enums এবং Pure Enums এর মধ্যে বিভিন্ন পরিস্থিতিতে ব্যবহার উপযোগী বৈশিষ্ট্য রয়েছে, যা কোডকে আরো উন্নত এবং কার্যকরী করে তোলে।

Content added By

PHP8.1 এ Enums এর Syntax

169

PHP 8.1 এ Enums এর Syntax

PHP 8.1 এ Enums (Enumerations) একটি গুরুত্বপূর্ণ ফিচার হিসেবে পরিচিত হয়েছে, যা একটি নির্দিষ্ট গ্রুপের মান সংজ্ঞায়িত করার জন্য ব্যবহৃত হয়। এই ফিচারটির মাধ্যমে, আপনি একাধিক মানের জন্য একটি টাইপ সেফ পদ্ধতিতে enum তৈরি করতে পারবেন, যা কোডের স্পষ্টতা, নিরাপত্তা এবং পড়া সহজ করে তোলে।

Enums কী?

Enum একটি ডেটা টাইপ যা পূর্বনির্ধারিত একাধিক স্থির মান ধারণ করে। এর মাধ্যমে, আপনি সেই মানগুলোর মধ্যে একটি নির্বাচন করতে পারবেন। উদাহরণস্বরূপ, আপনি যদি দিনগুলোকে একটি Enum হিসাবে সংজ্ঞায়িত করেন, তাহলে আপনি Monday, Tuesday, Wednesday ইত্যাদি মান ব্যবহার করতে পারবেন।

PHP 8.1 এ, Enums দুই ধরনের হতে পারে:

  1. Backed Enums: যেগুলোর সাথে নির্দিষ্ট মান থাকে (যেমন int বা string)।
  2. Pure Enums: যেগুলোর কোন মান থাকে না, শুধুমাত্র Enum এর নাম থাকে।

1. Backed Enums (প্রকারভেদ সহ Enum)

Backed Enums-এ আপনি Enum এর প্রতিটি কেসের জন্য একটি নির্দিষ্ট মান (যেমন একটি int বা string) নির্ধারণ করতে পারেন। এটি value-based Enum।

Backed Enum এর Syntax:

enum Status: string {
    case Pending = 'pending';
    case Approved = 'approved';
    case Rejected = 'rejected';
}

এখানে, Status একটি string backed Enum, যেখানে প্রতিটি কেসের সাথে একটি স্ট্রিং মান নির্ধারণ করা হয়েছে ('pending', 'approved', 'rejected')।

ব্যবহার উদাহরণ:

function processStatus(Status $status): void {
    echo "Processing status: " . $status->value; // Accessing the value of the enum
}

processStatus(Status::Approved); // Output: Processing status: approved

এখানে, আমরা Status::Approved ব্যবহার করছি, যা approved এর মান সহ একটি Enum কেস হবে। ->value দ্বারা Enum এর মান অ্যাক্সেস করা হয়েছে।


2. Pure Enums (Value-less Enum)

Pure Enums এ কোনো মান থাকে না, শুধুমাত্র Enum কেসের নাম থাকে। এই ধরনের Enums সাধারণত কেবল মাত্র কেসগুলির মধ্যে নির্বাচন করার জন্য ব্যবহৃত হয়।

Pure Enum এর Syntax:

enum Day {
    case Monday;
    case Tuesday;
    case Wednesday;
}

এখানে, Day একটি pure Enum, যার কোনো নির্দিষ্ট মান নেই।

ব্যবহার উদাহরণ:

function checkDay(Day $day): void {
    switch ($day) {
        case Day::Monday:
            echo "Start of the week!";
            break;
        case Day::Tuesday:
            echo "Second day!";
            break;
        case Day::Wednesday:
            echo "Midweek!";
            break;
    }
}

checkDay(Day::Monday); // Output: Start of the week!

এখানে, Day::Monday, Day::Tuesday, ইত্যাদি ব্যবহার করা হয়েছে, কিন্তু কোনো নির্দিষ্ট মান নেই, শুধুমাত্র Enum কেসের নাম।


3. Methods in Enums

PHP 8.1 এ Enums এ মেথড যুক্ত করা সম্ভব। আপনি Enum কেসের সাথে সম্পর্কিত অতিরিক্ত মেথড তৈরি করতে পারেন।

Methods in Enum:

enum Status: string {
    case Pending = 'pending';
    case Approved = 'approved';
    case Rejected = 'rejected';

    public function label(): string {
        return match($this) {
            self::Pending => 'Pending approval',
            self::Approved => 'Approved',
            self::Rejected => 'Rejected',
        };
    }
}

এখানে, label() মেথড Status Enum এর প্রতিটি কেসের জন্য একটি লেবেল রিটার্ন করে। match এক্সপ্রেশন ব্যবহার করা হয়েছে, যা PHP 8.0 এর নতুন ফিচার।

ব্যবহার উদাহরণ:

$status = Status::Pending;
echo $status->label();  // Output: Pending approval

এখানে, label() মেথড দ্বারা Status::Pending এর জন্য লেবেল রিটার্ন করা হয়েছে।


4. Enum Methods and Properties

Enum ক্লাসে আপনার নিজস্ব প্রপার্টি এবং মেথড যুক্ত করা সম্ভব।

enum Status: int {
    case Pending = 1;
    case Approved = 2;
    case Rejected = 3;

    public function isApproved(): bool {
        return $this === self::Approved;
    }
}

এখানে, isApproved() মেথড চেক করে যে Enum কেসটি Approved কিনা।

ব্যবহার উদাহরণ:

$status = Status::Approved;

if ($status->isApproved()) {
    echo "The status is approved!";
} else {
    echo "The status is not approved.";
}

এখানে, isApproved() মেথড ব্যবহার করে আমরা চেক করেছি যে স্ট্যাটাস Approved কিনা।


5. Enum Switch Case Example

Enum এর সাথে switch স্টেটমেন্ট ব্যবহার করার উদাহরণ:

enum Status: string {
    case Pending = 'pending';
    case Approved = 'approved';
    case Rejected = 'rejected';
}

function processStatus(Status $status): void {
    switch ($status) {
        case Status::Pending:
            echo "The status is pending.";
            break;
        case Status::Approved:
            echo "The status is approved.";
            break;
        case Status::Rejected:
            echo "The status is rejected.";
            break;
    }
}

processStatus(Status::Approved);  // Output: The status is approved.

এখানে, switch স্টেটমেন্ট ব্যবহার করে Status Enum এর কেসগুলোর মধ্যে তুলনা করা হয়েছে।


6. Enum for Validating Values

Enums ব্যবহার করে আপনি কিছু ভ্যালিডেশন করতে পারেন। উদাহরণস্বরূপ, একটি Enum তৈরি করা যা কোনো মানের বৈধতা যাচাই করতে পারে।

enum Role: string {
    case Admin = 'admin';
    case User = 'user';
    case Guest = 'guest';

    public static function isValidRole(string $role): bool {
        return in_array($role, array_column(self::cases(), 'value'));
    }
}

এখানে, isValidRole() মেথড ব্যবহার করে আপনি যাচাই করতে পারেন যে একটি নির্দিষ্ট মান একটি বৈধ Role কিনা।

ব্যবহার উদাহরণ:

if (Role::isValidRole('admin')) {
    echo "Valid role!";
} else {
    echo "Invalid role.";
}

এখানে, isValidRole('admin') চেক করে যদি admin একটি বৈধ Role হয়।


Conclusion

PHP 8.1-এ Enums একটি শক্তিশালী নতুন ফিচার, যা কোডের স্পষ্টতা এবং টাইপ সেফটি বাড়ায়। আপনি Enums ব্যবহার করে কিছু পূর্বনির্ধারিত মান সংজ্ঞায়িত করতে পারেন এবং তাদের সাথে যুক্ত মেথড এবং প্রপার্টি ব্যবহার করতে পারেন। Backed Enums (যেগুলোর মান থাকে) এবং Pure Enums (যেগুলোর মান থাকে না) এর মাধ্যমে আপনি বিভিন্ন ধরনের প্রয়োজনীয়তা পূরণ করতে পারবেন। Enums PHP-তে কোডকে আরও পরিষ্কার, সঠিক এবং নিরাপদ করার জন্য একটি দুর্দান্ত উপায়।

Content added By

Backed এবং Pure Enums এর পার্থক্য

159

PHP 8.1 এ Enums (এনাম) ফিচারটি আনুষ্ঠানিকভাবে চালু করা হয়, যা কোডে একটি সীমিত সংখ্যক মান (values) এর একটি সেটকে নির্দিষ্ট করতে ব্যবহৃত হয়। Enums কে দুইটি প্রধান শ্রেণীতে ভাগ করা যায়: Backed Enums এবং Pure Enums। এই দুটি এনাম টাইপের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, যা তাদের ব্যবহারের ক্ষেত্রে নির্দিষ্ট পরিস্থিতিতে কার্যকরী হয়ে ওঠে।

Backed Enums

Backed Enums হল এমন ধরনের এনাম যেখানে প্রতিটি এনাম ভ্যালু একটি নির্দিষ্ট ধরনের ব্যাকড ভ্যালু (যেমন, string বা integer) ধারণ করে। অর্থাৎ, প্রতিটি এনাম ভ্যালু একটি ডাটা টাইপ দ্বারা সমর্থিত থাকে, যেমন একটি string বা integer।

Backed Enums এর সুবিধা:

  • String বা Integer Value: প্রতি এনাম ভ্যালুর সাথে একটি মান (value) যুক্ত থাকে, যেটি একটি স্ট্রিং বা ইনটিজার হতে পারে। এই ধরনের এনাম আপনাকে কোডে ডাটা ভ্যালু স্টোর করতে এবং তা বিভিন্ন স্থানে ব্যবহার করতে দেয়।
  • ট্রান্সলেশন বা স্টোরেজে সহজ ব্যবহৃত হতে পারে: যখন এনাম ভ্যালু ডাটাবেস বা অ্যাপ্লিকেশনে সংরক্ষণ করতে হয় বা স্ট্রিং আকারে ট্রান্সলেট করা দরকার, তখন Backed Enums সুবিধাজনক।

Backed Enums উদাহরণ:

<?php

enum Status: string {
    case Pending = 'pending';
    case Approved = 'approved';
    case Rejected = 'rejected';
}

// Accessing the backed enum value
echo Status::Approved->value;  // Output: approved

এখানে, Status নামক Backed Enum-এ প্রতিটি এনাম ভ্যালুর সাথে একটি স্ট্রিং মান রয়েছে।


Pure Enums

Pure Enums হল এমন ধরনের এনাম যেখানে প্রতিটি এনাম ভ্যালু শুধুমাত্র একটি চিহ্ন বা সিম্বল (symbol) হিসেবে থাকে এবং তার সাথে কোনো সংযুক্ত মান (string বা integer) থাকে না। এটি শুধু একটি ধরনের এনাম যেটি মানে বিশেষ কিছু প্রতিনিধিত্ব করে।

Pure Enums এর সুবিধা:

  • ভ্যালু ছাড়া শুধুমাত্র সিম্বল: Pure Enums শুধুমাত্র প্রতিটি ভ্যালুর একটি স্বতন্ত্র সিম্বল ধারণ করে। এগুলোর মধ্যে কোনো ডাটা ভ্যালু বা স্ট্রিং থাকে না, এবং কেবলমাত্র তাদের আইডেন্টিফাইং সিম্বল (যেমন Status::Pending) থাকে।
  • কোডে আরো পরিষ্কারতা: Pure Enums সাধারণত ভালো হয় যখন আপনি শুধুমাত্র ভ্যালুর আইডেন্টিফিকেশন করতে চান এবং কোনো নির্দিষ্ট মানের সাথে কাজ করার প্রয়োজন নেই।

Pure Enums উদাহরণ:

<?php

enum Status {
    case Pending;
    case Approved;
    case Rejected;
}

// Accessing the pure enum value
$status = Status::Approved;
echo $status->name;  // Output: Approved

এখানে, Status নামক Pure Enum-এ কোনো স্ট্রিং বা ইনটিজার মান নেই, কেবল একটি সিম্বল আছে, যা প্রতিটি এনাম ভ্যালুকে চিহ্নিত করে।


Backed Enums এবং Pure Enums এর মধ্যে পার্থক্য:

বৈশিষ্ট্যBacked EnumsPure Enums
ব্যাকড ভ্যালুপ্রতিটি এনাম ভ্যালুর সাথে একটি ব্যাকড ভ্যালু থাকে (স্ট্রিং বা ইনটিজার)।শুধুমাত্র সিম্বল বা চিহ্ন থাকে, কোনো ডাটা ভ্যালু নেই।
ব্যবহারডাটাবেস বা স্টোরেজে স্ট্রিং বা ইনটিজার ভ্যালু ব্যবহার করতে সহায়ক।শুধুমাত্র আইডেন্টিফিকেশন এবং লজিক্যাল পরিসরে ব্যবহৃত হয়।
মানপ্রতিটি এনাম ভ্যালুর একটি নির্দিষ্ট মান থাকে, যেমন স্ট্রিং বা ইনটিজার।প্রতিটি এনাম ভ্যালু শুধুমাত্র একটি আইডেন্টিফাইং সিম্বল থাকে।
কোডে প্রসেসিংএনাম ভ্যালু কোনো মান সহ ফেরত আসে।শুধুমাত্র নাম বা সিম্বল অ্যাক্সেস করা হয়।
উদাহরণenum Status: string { case Pending = 'pending'; case Approved = 'approved'; }enum Status { case Pending; case Approved; }

উপসংহার:

Backed Enums এবং Pure Enums দুটোই PHP 8-এর শক্তিশালী ফিচার। যেখানে Backed Enums স্ট্রিং বা ইনটিজার ভ্যালু ব্যবহারের মাধ্যমে আরও বেশি নমনীয়তা এবং কার্যকারিতা প্রদান করে, Pure Enums শুধুমাত্র সিম্বল বা চিহ্ন ব্যবহার করে কোডের আরো পরিষ্কারতা এবং পড়াশোনার সুবিধা দেয়। উভয় ধরনের এনামের ব্যবহারের উপকারিতা নির্ভর করে আপনার প্রয়োজনের উপর, যেমন ডাটা ভ্যালু সংরক্ষণ বা শুধু চিহ্নের মাধ্যমে লজিক্যাল ব্যবহারের উদ্দেশ্যে।

Content added By

Enums ব্যবহার করে Clean Code Structure তৈরি

155

PHP 8.1 এ Enums (Enumeration) ফিচারটি চালু হয়েছে, যা কোডের আরও পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য স্ট্রাকচার তৈরিতে সাহায্য করে। Enums হল নির্দিষ্ট মানগুলির একটি সেট, যা আপনাকে কনস্ট্যান্ট ব্যবহার না করে প্রকারভেদ মান নির্ধারণ করতে সহায়ক। Enums ব্যবহার করে, আপনি কোডে স্পষ্টতা এবং দৃঢ়তা আনতে পারেন, এবং এর মাধ্যমে কোডের রিডেবিলিটি বাড়ানো সম্ভব।

Enums এর ব্যবহার এবং Clean Code Structure

ধরা যাক, আপনার একটি ই-কমার্স অ্যাপ্লিকেশন রয়েছে, যেখানে Order Status নির্ধারণ করার জন্য কয়েকটি ভিন্ন মান রয়েছে: Pending, Shipped, Delivered, Cancelled ইত্যাদি। এর জন্য আপনি Enums ব্যবহার করে একটি পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য স্ট্রাকচার তৈরি করতে পারেন।

1. Enum ক্লাস তৈরি করা

প্রথমে, আমরা একটি Enum ক্লাস তৈরি করব, যেখানে আমরা Order এর সম্ভাব্য স্ট্যাটাসগুলির জন্য বিভিন্ন মান (value) নির্ধারণ করব।

<?php

enum OrderStatus: string {
    case Pending = 'pending';
    case Shipped = 'shipped';
    case Delivered = 'delivered';
    case Cancelled = 'cancelled';
}

?>

এখানে OrderStatus একটি Enum ক্লাস হিসেবে কাজ করছে, যেখানে Pending, Shipped, Delivered, এবং Cancelled স্ট্যাটাসগুলি সংজ্ঞায়িত করা হয়েছে। এটি string টাইপের Enum, অর্থাৎ মানগুলির ধরন string


2. Enum ব্যবহার করে Clean Code Structure

এখন, Enum ব্যবহার করে আপনি কোডে OrderStatus নির্ধারণ করতে পারবেন, যা আরও পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য হবে।

উদাহরণ: Order Class ব্যবহার করা

<?php

class Order {
    private OrderStatus $status;

    public function __construct(OrderStatus $status) {
        $this->status = $status;
    }

    public function getStatus(): OrderStatus {
        return $this->status;
    }

    public function setStatus(OrderStatus $status): void {
        $this->status = $status;
    }

    public function isShipped(): bool {
        return $this->status === OrderStatus::Shipped;
    }

    public function isDelivered(): bool {
        return $this->status === OrderStatus::Delivered;
    }

    public function isCancelled(): bool {
        return $this->status === OrderStatus::Cancelled;
    }
}

// Creating an Order object with a specific status
$order = new Order(OrderStatus::Pending);

// Check the status of the order
echo $order->getStatus()->value;  // Output: pending

// Change the status
$order->setStatus(OrderStatus::Shipped);
echo $order->getStatus()->value;  // Output: shipped

?>

ব্যাখ্যা:

  1. OrderStatus Enum: OrderStatus Enum-এ চারটি সম্ভাব্য মান রয়েছে, যা Order ক্লাসের মধ্যে ব্যবহৃত হচ্ছে।
  2. Order Class: Order ক্লাসে OrderStatus Enum ব্যবহার করা হয়েছে স্ট্যাটাস সেট এবং গেট করার জন্য। এখানে isShipped(), isDelivered(), isCancelled() মত মেথডগুলো ব্যবহার করা হয়েছে, যা সহজেই একটি অর্ডারের স্ট্যাটাস চেক করতে সহায়ক।
  3. Clean Code: এখানে, Enums ব্যবহার করার মাধ্যমে কোডটি পরিষ্কার এবং সহজে বুঝতে পারা যায়। আপনি শুধু Enum ক্লাসে স্ট্যাটাস গুলোর মান সংজ্ঞায়িত করেছেন এবং স্ট্যাটাস চেক করার জন্য মেথড ব্যবহার করেছেন।

3. Enum এর বৈশিষ্ট্য এবং Clean Code

৩.১. Type Safety

OrderStatus এর মত Enums ব্যবহারে type safety নিশ্চিত হয়। আপনি একটি বৈধ স্ট্যাটাস ছাড়া অন্য কিছু সেট করতে পারবেন না।

// This will throw an error since 'invalid' is not a valid OrderStatus
$order->setStatus('invalid');  // Error

এটি ভুল স্ট্যাটাস ব্যবহারের সম্ভাবনা বন্ধ করে দেয় এবং কোডকে আরও নির্ভরযোগ্য এবং নিরাপদ করে।

৩.২. Enum value access

Enum value অ্যাক্সেস করা অনেক সহজ এবং কোডের মধ্যে সঠিক মান ব্যবহৃত হচ্ছে তা নিশ্চিত করা যায়। যেমন:

echo OrderStatus::Pending->value;  // Output: pending

এতে কোড আরও স্পষ্ট এবং সঠিক হয়, যেহেতু আপনি কেবলমাত্র পূর্বনির্ধারিত মানগুলিই ব্যবহার করতে পারবেন।

৩.৩. কোড রিডেবিলিটি

এমনকি কোডের মধ্যে Pending, Shipped বা Delivered লেখার চেয়ে, Enum ব্যবহার করে আপনি সহজেই তার প্রকৃত মান বুঝতে পারবেন, যা কোডের রিডেবিলিটি বাড়ায়।


4. Enum এর সাথে Switch Statement ব্যবহার করা

switch স্টেটমেন্টে Enum ব্যবহার করলে কোড আরও পরিষ্কার হয় এবং সহজেই একাধিক মানের সাথে কাজ করা যায়। উদাহরণস্বরূপ:

<?php

function printOrderStatus(OrderStatus $status): void {
    switch ($status) {
        case OrderStatus::Pending:
            echo "Order is pending.\n";
            break;
        case OrderStatus::Shipped:
            echo "Order has been shipped.\n";
            break;
        case OrderStatus::Delivered:
            echo "Order has been delivered.\n";
            break;
        case OrderStatus::Cancelled:
            echo "Order has been cancelled.\n";
            break;
    }
}

$order = new Order(OrderStatus::Shipped);
printOrderStatus($order->getStatus());  // Output: Order has been shipped.
?>

এখানে, switch স্টেটমেন্ট ব্যবহার করে OrderStatus এর বিভিন্ন মানের জন্য আলাদা আলাদা লজিক প্রদান করা হয়েছে, যা কোডকে আরও পরিষ্কার এবং সংক্ষিপ্ত করে।


উপসংহার

PHP 8.1-এ Enums ফিচারটি ব্যবহার করে আপনি কোডে আরো পরিষ্কার, শক্তিশালী এবং রক্ষণাবেক্ষণযোগ্য স্ট্রাকচার তৈরি করতে পারেন। এটি বিশেষত তখন উপকারী যখন আপনার কোডে একটি নির্দিষ্ট মানের সীমাবদ্ধতা থাকে (যেমন: স্ট্যাটাস, প্রকারভেদ ইত্যাদি) এবং আপনি সেগুলির উপর নির্ভরশীল মেথড এবং লজিক তৈরি করতে চান। Enums ব্যবহার করে আপনি type safety, readability, এবং maintainability বাড়াতে পারবেন, যা ক্লিন কোডের জন্য অত্যন্ত গুরুত্বপূর্ণ।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...